package dao;

import java.util.List;

import pojo.Carrier;
import pojo.CustomerReview;
import pojo.DeviceBrand;
import pojo.OperatingSystem;
import pojo.Price;
import pojo.Product;
import pojo.ProductImage;

public interface ProductDAO {
	public List<Product> getAllProduct();
	public List<Product> getAllProduct(List<Price> lstPrice);
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand );
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier);
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem);
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview);
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview, int pagecurrent, int numproductperpage);
	public List<Product> getAllProduct(List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview, int pagecurrent, int numproductperpage, int sortby);
	
	public List<Product> getAllProductFromSearch(String keySearch, List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview);
	public List<Product> getAllProductFromSearch(String keySearch, List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview, int pagecurrent, int numproductperpage, int sortby);
	
	public List<Product> getListProductFromIdCategory(String idCategory);
	public List<Product> getListProductFromIdCategory(String idCategory, List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview);
	public List<Product> getListProductFromIdCategory(String idCategory, List<Price> lstPrice, List<DeviceBrand> lstDeviceBrand, List<Carrier> lstCarrier, List<OperatingSystem> lstOperatingSystem, List<CustomerReview> lstCustomerReview, int pagecurrent, int numproductperpage, int sortby);
	public Product getProductBySKU(String sku);
	
	public List<Product> ListProdcutOrderByRate(int offset, int num);
	
	public boolean addProduct(Product product, int carrier, int os, String category, int deviceBrand, boolean available, List<ProductImage> productimages);
	public boolean updateProduct(Product product, int carrier, int os, String category, int deviceBrand, boolean available);
	public boolean deleteProduct(Product product);
}
